home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / util4 / gtlclndx.lha / GetLocalIndex.rx < prev   
Text File  |  1996-01-31  |  8KB  |  211 lines

  1. /*
  2. ** $VER: GetLocalIndex.rx 0.1 (31.1.96)
  3. **
  4. ** ARexx script to create aminet style index files
  5. **
  6. ** To use this script, change the following 3 variables to your
  7. ** own settings: MainDir, HostAddress, LocalFile.
  8. **
  9. ** This script requires rexxsupport.library to run.
  10. **
  11. ** Written by Edwin H. Bielawski (ehb@draco.prima.ruhr.de)
  12. **
  13. ** Status: FREEWARE
  14. **
  15. */
  16.  
  17. MainDir =     'FTPC:aminet'                             /* your aminet directory */
  18. HostAddress = 'draco.prima.ruhr.de [193.141.111.197]'   /* Host name and IP address */
  19. LocalFile =   'LOCAL'                                   /* Name (file part) of the index file to create */
  20.  
  21. If ~Show('L',"rexxsupport.library") Then AddLib("rexxsupport.library",0,-30,0)
  22.  
  23. Directory = MainDir
  24. Say 'Create '||LocalFile||' for '||Directory
  25. Files = ShowDir(Directory, 'D', ';')
  26. If Open(WriteHandle,'T:LOCAL.0','WRITE') Then Do
  27.   WriteLn(WriteHandle,'')
  28.   CurrentFile = ''
  29.   Do Until (CurrentFile = '')
  30.     Parse VAR Files CurrentFile';'Files
  31.     If CurrentFile ~= '' Then Do
  32.       CALL GetLocalSub(Directory, CurrentFile, LocalFile)
  33.       Line = Directory||'/'||CurrentFile||'/'||LocalFile
  34.       WriteLn(WriteHandle,Line)
  35.     End
  36.   End
  37.   Close(WriteHandle)
  38.   Address COMMAND "Sort T:LOCAL.0 TO T:LOCAL.1"
  39.   Destination = Directory||'/'||LocalFile
  40.   If Open(WriteHandle,Destination,'WRITE') Then Do
  41.     WriteLn(WriteHandle,'| Local Aminet index on '||Date('N'))
  42.     WriteLn(WriteHandle,'| The list is sorted by directory and file name')
  43.     WriteLn(WriteHandle,'| This site is '||HostAddress||'.')
  44.     WriteLn(WriteHandle,'| Age measured in weeks before creation of this index.')
  45.     WriteLn(WriteHandle,'|')
  46.     WriteLn(WriteHandle,'|File              Dir        Size Age Description')
  47.     WriteLn(WriteHandle,'|----------------- ---        ---- --- -----------')
  48.     If Open(ReadHandle,'T:LOCAL.1','READ') Then Do
  49.       Do While ~eof(ReadHandle)
  50.         CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  51.         If CurrentLine ~= '' Then Do
  52.           If Open(TempReadHandle,CurrentLine,'READ') Then Do
  53.             Line = ReadLn(TempReadHandle)
  54.             Line = ReadLn(TempReadHandle)
  55.             Do While ~eof(TempReadHandle)
  56.               Line = ReadLn(TempReadHandle)
  57.               If Line ~= '' Then WriteLn(WriteHandle,Line)
  58.             End
  59.             Close(TempReadHandle)
  60.           End
  61.         End
  62.       End
  63.     End
  64.     Close(WriteHandle)
  65.     Close(ReadHandle)
  66.   End
  67. End
  68.  
  69. ADDRESS COMMAND "Delete >NIL: T:LOCAL.?"
  70.  
  71. Exit
  72.  
  73. /* ------------------------------------------------- */
  74.  
  75. GetLocalSub: Procedure
  76. Parse ARG StartDir,SubDir,LocalFile
  77. If SubDir ~= '' Then Do
  78.   Directory = StartDir||'/'||SubDir
  79.   Say 'Create '||LocalFile||' for '||Directory
  80.   Files = ShowDir(Directory, 'D', ';')
  81.   If Open(WriteHandle1,'T:LOCAL.2','WRITE') Then Do
  82.     WriteLn(WriteHandle1,'')
  83.     CurrentFile = ''
  84.     Do Until (CurrentFile = '')
  85.       Parse VAR Files CurrentFile';'Files
  86.       If CurrentFile ~= '' Then Do
  87.         CALL GetLocalSubSub(StartDir, SubDir||'/'||CurrentFile, LocalFile)
  88.         Line = Directory||'/'||CurrentFile||'/'||LocalFile
  89.         WriteLn(WriteHandle1,Line)
  90.       End
  91.     End
  92.     Close(WriteHandle1)
  93.     Address COMMAND "Sort T:LOCAL.2 TO T:LOCAL.3"
  94.     Destination = Directory||'/'||LocalFile
  95.     If Open(WriteHandle1,Destination,'WRITE') Then Do
  96.       Message = '| Contents of the directory '||SubDir
  97.       If exists(Directory||'/.message') Then Do
  98.         If Open(ReadHandle,Directory||'/.message','READ') Then Do
  99.           Message = ReadLn(ReadHandle)
  100.           Close(ReadHandle)
  101.         End
  102.         Message = '| Contents of the directory '||Message
  103.         Message = Compress(Message,'0d'x)
  104.       End
  105.       WriteLn(WriteHandle1,Message)
  106.       WriteLn(WriteHandle1,'|------------------------------------------------')
  107.       If Open(ReadHandle,'T:LOCAL.3','READ') Then Do
  108.         Do While ~eof(ReadHandle)
  109.           CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  110.           If CurrentLine ~= '' Then Do
  111.             If Open(TempReadHandle,CurrentLine,'READ') Then Do
  112.               Line = ReadLn(TempReadHandle)
  113.               Line = ReadLn(TempReadHandle)
  114.               Do While ~eof(TempReadHandle)
  115.                 Line = ReadLn(TempReadHandle)
  116.                 If Line ~= '' Then WriteLn(WriteHandle1,Line)
  117.               End
  118.               Close(TempReadHandle)
  119.             End
  120.           End
  121.         End
  122.       End
  123.       Close(WriteHandle1)
  124.       Close(ReadHandle)
  125.     End
  126.   End
  127. End
  128. Return(0)
  129.  
  130. /* ------------------------------------------------- */
  131.  
  132. GetLocalSubSub: Procedure
  133. Parse ARG StartDir,SubDir,LocalFile
  134. If SubDir ~= '' Then Do
  135.   Directory = StartDir||'/'||SubDir
  136.   Say 'Create '||LocalFile||' for '||Directory
  137.   Files = ShowDir(Directory, 'f', ';')
  138.   If Open(WriteHandle2,'T:LOCAL.4','WRITE') Then Do
  139.     WriteLn(WriteHandle2,'')
  140.     CurrentFile = ''
  141.     Do Until (CurrentFile = '')
  142.       Parse VAR Files CurrentFile';'Files
  143.       If CurrentFile ~= '' Then Do
  144.         UpperCurrentFile = Upper(CurrentFile)
  145.         If UpperCurrentFile ~= 'LOCAL' Then Do
  146.           If Left(UpperCurrentFile,5) ~= 'INDEX' Then Do
  147.             If Left(UpperCurrentFile,1) ~= '.' Then Do
  148.               If Right(UpperCurrentFile,6) ~= 'README' Then Do
  149.                 CurrentLine = Left(CurrentFile,19)||Left(SubDir,10)
  150.                 FileState = StateF(Directory||'/'||CurrentFile)
  151.                 Parse VAR FileState Dummy1 FileSize Dummy2 Dummy3 F_Tag Dummy4
  152.                 FileSizeRest = Left(Right(FileSize//(1024*1024),3),1)
  153.                 If FileSize < 1024 Then CurrentLine = CurrentLine||Right(FileSize,5)
  154.                 Else Do
  155.                   FileSize = FileSize%1024
  156.                   If FileSize < 1024 Then CurrentLine = CurrentLine||Right(FileSize,4)||'K'
  157.                   Else Do
  158.                     FileSize = FileSize%1024
  159.                     If FileSizeRest = ' ' Then CurrentLine = CurrentLine||Right(FileSize,4)||'M'
  160.                     Else CurrentLine = CurrentLine||Right(FileSize,2)||'.'||FileSizeRest||'M'
  161.                   End
  162.                 End
  163.                 CurrentLine = CurrentLine||Right((Date('I')-F_Tag+1)%7,4)
  164.                 CheckFile = CurrentFile
  165.                 ReadMeFile = Directory||'/'||CheckFile||'.readme'
  166.                 Do Until (CheckFile='' | exists(ReadMeFile))
  167.                   CheckFile = Left(CheckFile,Length(CheckFile)-1)
  168.                   ReadMeFile = Directory||'/'||CheckFile||'.readme'
  169.                 End
  170.                 If CheckFile ~='' Then Do
  171.                   If Open(ReadHandle,ReadMeFile,'READ') Then Do
  172.                     Message = ReadLn(ReadHandle)
  173.                     Parse VAR Message 'Short:' ReadMe
  174.                     CurrentLine = CurrentLine||' '||Strip(ReadMe)
  175.                     Close(ReadHandle)
  176.                   End
  177.                 End
  178.                 WriteLn(WriteHandle2,CurrentLine)
  179.               End
  180.             End
  181.           End
  182.         End
  183.       End
  184.     End
  185.     Close(WriteHandle2)
  186.     Address COMMAND "Sort T:LOCAL.4 TO T:LOCAL.5"
  187.     If Open(WriteHandle2,Directory||'/'||LocalFile,'WRITE') Then Do
  188.       Message = '| Contents of the directory '||SubDir
  189.       If exists(Directory||'/.message') Then Do
  190.         If Open(ReadHandle,Directory||'/.message','READ') Then Do
  191.           Message = ReadLn(ReadHandle)
  192.           Close(ReadHandle)
  193.         End
  194.         Message = '| Contents of the directory '||Message
  195.         Message = Compress(Message,'0d'x)
  196.       End
  197.       WriteLn(WriteHandle2,Message)
  198.       WriteLn(WriteHandle2,'|------------------------------------------------')
  199.       If Open(ReadHandle,'T:LOCAL.5','READ') Then Do
  200.         Do While ~eof(ReadHandle)
  201.           CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  202.           If CurrentLine ~= '' Then WriteLn(WriteHandle2,CurrentLine)
  203.         End
  204.       End
  205.       Close(ReadHandle)
  206.       Close(WriteHandle2)
  207.     End
  208.   End
  209. End
  210. return(0)
  211.